﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Sisco.AplicacionEscritorio.Util;
using Sisco.LogicaNegocio;


namespace Sisco.AplicacionEscritorio.Usuario
{     
    public partial class Registro_Usuario : Form
    {
        private AccesoDatos.USUARIO usuarioSistema;

        public Registro_Usuario()
        {
            InitializeComponent();
        }

        public Registro_Usuario(AccesoDatos.USUARIO usuariosistema) : this()
        {
            usuarioSistema = usuariosistema;
        }

        private void Registro_Usuario_Load(object sender, EventArgs e)
        {
            this.LoadListEmpresa();
            this.LoadListDepartamento();
        }

        private void LoadListEmpresa()
        {
            EmpresaBLL empresaBLL = new EmpresaBLL();

            cmbEmpresa.DataSource = empresaBLL.Listar();
            cmbEmpresa.ValueMember = "ID";
            cmbEmpresa.DisplayMember = "NOMBREEMPRESA";
            cmbEmpresa.SelectedIndex = -1;
        }

        private void LoadListDepartamento()
        {
            DepartamentoBLL departamentoBLL = new DepartamentoBLL();
            cmbDepartamento.DataSource = departamentoBLL.Listar();
            cmbDepartamento.ValueMember = "ID";
            cmbDepartamento.DisplayMember = "NOMBREDEPARTAMENTO";
            cmbDepartamento.SelectedIndex = -1;
        }

        private void cb_Empresa_SelectionChangeCommitted(object sender, EventArgs e)
        {
            if (cmbEmpresa.SelectedIndex >= 0)
            {
                SucursalBLL sucursalBLL = new SucursalBLL();

                AccesoDatos.EMPRESA selectedEmpresa = cmbEmpresa.SelectedItem as AccesoDatos.EMPRESA;
                cmbSucursal.DataSource = sucursalBLL.Listar(selectedEmpresa);
                cmbSucursal.ValueMember = "ID";
                cmbSucursal.DisplayMember = "CIUDAD";
                cmbSucursal.SelectedIndex = -1;
            }
        }
      
        private void LimpiarFormulario() 
        {
            txtNombre.ResetText();
            txtApellidos.ResetText();
            txtCorreo.ResetText();
            cmbEmpresa.DataSource = null;
            cmbSucursal.DataSource = null;
            cmbDepartamento.DataSource = null;

            txtUsuarioDBS.ResetText();
            txtUsuarioWindows.ResetText();

            txtCodigoEmpleado.ResetText();            
            txtTelefono.ResetText();
            txtAnexo.ResetText();
            txtCelular.ResetText();
            txtRPM.ResetText();
            txtRPC.ResetText();
            txtNextel.ResetText();

            gbAccesoSistema.Visible = true;
            txtUsuario.ResetText();
            txtPassword.ResetText();
        }

        private void rbPersonalSistemas_CheckedChanged(object sender, EventArgs e)
        {
            if (rbPersonalEmpresa.Checked)
            {
                cmbEmpresa.Enabled = true;
                cmbSucursal.Enabled = true;
                cmbDepartamento.Enabled = true;
                txtCodigoEmpleado.Enabled = true;
                txtUsuarioDBS.Enabled = true;

                this.LimpiarFormulario();

                this.LoadListEmpresa();
                this.LoadListDepartamento();
            }
        }

        private void rbTercero_CheckedChanged(object sender, EventArgs e)
        {
            if (rbTercero.Checked)
            {
                this.LimpiarFormulario();

                cmbEmpresa.DataSource = null;
                cmbEmpresa.Enabled = false;
                
                cmbSucursal.DataSource = null;
                cmbSucursal.Enabled = false;

                cmbDepartamento.DataSource = null;
                cmbDepartamento.Enabled = false;

                txtCodigoEmpleado.Enabled = false;
                txtUsuarioDBS.Enabled = false;
            }
        }

        private void btn_Agregar_Click(object sender, EventArgs e)
        {
            bool correcto = false;
            bool correcto1 = false;

            if (!string.IsNullOrWhiteSpace(txtNombre.Text))
            {
                if (!string.IsNullOrWhiteSpace(txtApellidos.Text))
                {
                    if (!(string.IsNullOrWhiteSpace(txtCodigoEmpleado.Text) && rbPersonalEmpresa.Checked))
                    {
                        UsuarioBLL usuarioBLL = new UsuarioBLL();

                        List<AccesoDatos.USUARIO> listaUsuario1 = usuarioBLL.BuscarUsuario(txtNombre.Text.Trim(), txtApellidos.Text.Trim());
                        List<AccesoDatos.USUARIO> listaUsuario2 = rbPersonalEmpresa.Checked ? usuarioBLL.BuscarUsuario(txtCodigoEmpleado.Text.Trim()) : new List<AccesoDatos.USUARIO>();
                        List<AccesoDatos.USUARIO> ListaUsuario12 = listaUsuario1.Union(listaUsuario2).ToList();

                        if (ListaUsuario12.Count == 0)
                        {
                            List<AccesoDatos.USUARIO> listaNombresBusqueda = usuarioBLL.Buscar("NOMBRE", txtNombre.Text.Trim());
                            List<AccesoDatos.USUARIO> listaApellidosBusqueda = usuarioBLL.Buscar("APELLIDOS", txtNombre.Text.Trim());
                            List<AccesoDatos.USUARIO> listaNombreApellido = listaNombresBusqueda.Union(listaApellidosBusqueda).ToList();

                            if (listaNombreApellido.Count > 0)
                            {
                                DialogResult result = (new DialogBusqueda("USUARIO", "Los siguientes nombres coinciden con los nombres o apellidos ingresados.\n¿Desea Continuar?", "Sisco", listaNombreApellido)).ShowDialog(this);

                                if (result == DialogResult.Yes)
                                {
                                    correcto = true;
                                }
                                else if (result == DialogResult.No)
                                {
                                    this.LimpiarFormulario();
                                }
                            }
                            else
                            {
                                correcto = true;
                            }
                        }
                        else
                        {
                            MessageBox.Show("El usuario ya se encuentra registrado", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Ingrese el codigo del empleado", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    MessageBox.Show("Ingrese los apellidos del usuario", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show("Ingrese los nombres del usuario", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }

            if (correcto)
            {
                if (rbPersonalEmpresa.Checked)
                {
                    if (cmbEmpresa.SelectedIndex >= 0)
                    {
                        if (cmbSucursal.SelectedIndex >= 0)
                        {
                            if (cmbDepartamento.SelectedIndex >= 0)
                            {
                                if ((string.IsNullOrWhiteSpace(txtUsuario.Text) && string.IsNullOrWhiteSpace(txtPassword.Text)) ||
                                    (!string.IsNullOrWhiteSpace(txtUsuario.Text) && !string.IsNullOrWhiteSpace(txtPassword.Text)))
                                {
                                    correcto1 = true;
                                }
                                else
                                {
                                    MessageBox.Show("El campo de usuario o password para el acceso al sistema se encuentra vacío.", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                }
                            }
                            else
                            {
                                MessageBox.Show("Seleccione campo de Departamento", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                            }
                        }
                        else
                        {
                            MessageBox.Show("Seleccione campo de sucursal", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Seleccione campo de Empresa", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    correcto1 = true;
                }
            }

            if (correcto1)
            {
                UsuarioBLL usuarioBLL = new UsuarioBLL();

                AccesoDatos.USUARIO nuevoUsuario = new AccesoDatos.USUARIO()
                {
                    IDEMPRESA = rbPersonalEmpresa.Checked ? int.Parse(cmbEmpresa.SelectedValue.ToString()) : 0,
                    IDSUCURSAL = rbPersonalEmpresa.Checked ? int.Parse(cmbSucursal.SelectedValue.ToString()): new Nullable<int>(),
                    IDDEPARTAMENTO = rbPersonalEmpresa.Checked ? int.Parse(cmbDepartamento.SelectedValue.ToString()) : new Nullable<int>(),
                    CODIGO_RRHH = rbPersonalEmpresa.Checked ? txtCodigoEmpleado.Text.Trim() : string.Empty,
                    USUARIO_WINDOWS = txtUsuarioWindows.Text.Trim(),
                    USUARIO_DBS = rbPersonalEmpresa.Checked ? txtUsuarioDBS.Text.Trim() : string.Empty,
                    NOMBRES = txtNombre.Text.Trim(),
                    APELLIDOS = txtApellidos.Text.Trim(),
                    NOMBRECOMPLETO = txtNombre.Text.Trim() + " " + txtApellidos.Text.Trim(),
                    CORREO = txtCorreo.Text.Trim(),                    
                    SUCURSAL = rbPersonalEmpresa.Checked ? (cmbSucursal.SelectedItem as AccesoDatos.SUCURSAL).CIUDAD.Trim() : string.Empty,
                    DEPARTAMENTO = rbPersonalEmpresa.Checked ? (cmbDepartamento.SelectedItem as AccesoDatos.DEPARTAMENTO).NOMBREDEPARTAMENTO : string.Empty,
                    TELEFONO = txtTelefono.Text.Trim(),
                    ANEXO = txtAnexo.Text.Trim(),
                    CELULAR = txtCelular.Text.Trim(),
                    RPM = txtRPM.Text.Trim(),
                    RPC = txtRPC.Text.Trim(),
                    NEXTEL = txtNextel.Text.Trim(),
                    REPARADOR = (!string.IsNullOrWhiteSpace(txtUsuario.Text) && (!string.IsNullOrWhiteSpace(txtPassword.Text))) ? 1 : 0,
                    USUARIO_SIST = txtUsuario.Text,
                    PASSWORD_SIST = txtPassword.Text,
                    ELIMINADO = 0,
                    FECHAREGISTRO = DateTime.Now,
                    REGISTRADOPOR = usuarioSistema.NOMBRECOMPLETO != null ? usuarioSistema.NOMBRECOMPLETO.Trim() : string.Empty
                };

                int usuarioRegistrado = usuarioBLL.Registrar(nuevoUsuario);

                if (usuarioRegistrado > 0)
                {
                    DialogResult dr = MessageBox.Show("Usuario registrado.\n¿Desea registrar otro usuario?", "Cotizav", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

                    if (dr == DialogResult.Yes)
                    {
                        this.LimpiarFormulario();
                        this.LoadListEmpresa();
                        this.LoadListDepartamento();
                    }
                    else if(dr == DialogResult.No)
                    {
                        this.Close();
                    }
                }
            }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
